#include <stdio.h>
int main()
{
    int n = 9; // 按照整形的形式把  9  放进内存中
    // 00000000000000000000000000001001   (9的二进制序列   原码 反码 补码)
    float *pFloat = (float *)&n;
    printf("n的值为: %d\n", n); // 9是按照整形的规则存进去的，再按照整形的规则取出来打印，结果是9

    printf("*pFloat的值为: %f\n", *pFloat); // pfloat指向的类型是浮点数，取数据的时候会认为空间中存放的是浮点型数据，会按照浮点数的规则取出来数据(但浮点数和整数的存储方式不一样)，所以不一定能取出之前的数据
    // 00000000000000000000000000001001   *pFloat指向的是一个浮点数的地址，打印的时候按照浮点数的规则取出
    // 0 00000000 00000000000000000001001
    // s=0  E=1-127=-126  M的整数位直接补0     +0.00000000000000000001001*2^(-126)  这是一个无穷小的数
    // float的精度是7位有效数字  打印出来是 0.000000

    *pFloat = 9.0; // 以浮点数的形式向内存中存储
    // 1001.0  9.0的二进制序列
    // 怎么存  1.001*2^3
    // S=0     M=1.001       E=3
    // 0 10000010 00100000000000000000000   这样子存入内存了  0  (3+127)的二进制序列  去掉整数1后，不够的补0
    // 9.0已经放入内存了
    // *pFloat = 9.0;   这个语句是把  n 所对应的 4 个字节修改为 01000001000100000000000000000000

    printf("num的值为: %d\n", n); //
    // 以%d 的形式打印  是把   01000001000100000000000000000000  当成一个二进制整形的补码来看
    // 01000001000100000000000000000000  补码  正数的 原码 反码 补码相同
    // 1091567616  对应的十进制数字
    printf("*pFloat的值为: %f\n", *pFloat); //
    return 0;
}
